<?php


namespace app\common\builder\form\traits;

/**
 * 每种表单类型的解析回调
 * Trait ParseItemElem
 * @package app\common\builder\form\traits
 */
trait ParseItemElem
{
    /**
     * 所有text类型都会前置回调
     */
    protected function beforeTextParse($item)
    {
        return $item;
    }

    /**
     * text类型后置后调
     * @param $item
     * @return mixed
     */
    protected function afterTextParse($item)
    {
        return $item;
    }


    protected function afterRadioParse($item)
    {
        $item['options'] = $item['options'] ?? [];
        $item['is_title'] = $item['is_title'] ?? true;
        unset($item['attrs']['id']);
        return $item;
    }

    protected function afterCheckboxParse($item)
    {
        $item['options'] = $item['options'] ?? [];
        $item['is_title'] = $item['is_title'] ?? true;
        $item['attrs']['name'] .= '[]';
        $item['attrs']['lay-skin'] = $item['attrs']['lay-skin'] ?? 'primary';
        if (isset($item['attrs']['value']) && !is_array($item['attrs']['value'])) {
            settype($item['attrs']['value'], 'array');
        }
        return $item;
    }

    protected function afterIconParse($item)
    {

        if (!isset($item['attrs']['data-search'])) {
            $item['attrs']['data-search'] = true;
        }
        if (!isset($item['attrs']['data-page'])) {
            $item['attrs']['data-page'] = true;
        }
        $item['attrs']['style'] = 'display:none;';
        return $item;
    }

    protected function afterSwitchParse($item)
    {
        if (empty($item['attrs']['lay-text'])) {
            $item['attrs']['lay-text'] = 'Y|N';
        }
        if (!isset($item['switch']['no'])) {
            // 不选中的时候的值
            $item['switch']['no'] = 0;
        }
        if (!isset($item['switch']['yes'])) {
            // 不选中的时候的值
            $item['switch']['yes'] = 1;
        }
        if (isset($item['attrs']['value']) && $item['attrs']['value'] == $item['switch']['yes']) {
            $item['attrs']['checked'] = true;
        }
        return $item;
    }

    protected function beforeDatetimeParse($item)
    {
        if (empty($item['fetch'])) {
            $item['fetch'] = 'date';
        }
        return $item;
    }
    protected function beforeTimeParse($item)
    {
        if (empty($item['fetch'])) {
            $item['fetch'] = 'date';
        }
        return $item;
    }
    protected function beforeMonthParse($item)
    {
        if (empty($item['fetch'])) {
            $item['fetch'] = 'date';
        }
        return $item;
    }
    protected function beforeYearParse($item)
    {
        if (empty($item['fetch'])) {
            $item['fetch'] = 'date';
        }
        return $item;
    }

    protected function beforeColorParse($item)
    {
        if (empty($item['attrs']['type']) || !in_array($item['attrs']['type'], ['text', 'hidden'])) {
            $item['attrs']['type'] = 'text';
        }
        if (!isset($item['attrs']['data-predefine'])) {
            $item['attrs']['data-predefine'] = true;
        }
        return $item;
    }

    protected function beforeTransferParse($item)
    {
        $item['options'] = $item['options'] ?? [];
        if (!empty($item['options']) && is_array($item['options'])) {
            $item['options'] = json_encode($item['options'], JSON_UNESCAPED_UNICODE);
        }
        if (!isset($item['attrs']['data-search'])) {
            $item['attrs']['data-search'] = true;
        }
        return $item;
    }

    protected function beforeImageParse($item)
    {
        if (empty($item['attrs']['data-upload-text'])) {
            $item['attrs']['data-upload-text'] = '单图片';
        }
        $item = $this->uploadParse('image', $item);

        return $item;
    }
    protected function beforeMultipleImageParse($item)
    {

        if (empty($item['attrs']['data-upload-text'])) {
            $item['attrs']['data-upload-text'] = '多图片';
        }
        $item = $this->uploadParse('multiple_image', $item);
        return $item;
    }
    protected function beforeFileParse($item)
    {

        if (empty($item['attrs']['data-upload-text'])) {
            $item['attrs']['data-upload-text'] = '单文件';
        }
        $item = $this->uploadParse('file', $item);
        return $item;
    }
    protected function beforeMultipleFileParse($item)
    {
        if (empty($item['attrs']['data-upload-text'])) {
            $item['attrs']['data-upload-text'] = '多文件';
        }
        $item = $this->uploadParse('multiple_file', $item);
        return $item;
    }

    protected function uploadParse($type, $item)
    {
        if (empty($item['fetch'])) {
            $item['fetch'] = 'upload';
        }
        $item['attrs']['data-elem'] = $type;
        if (!empty($item['attrs']['data-data']) && is_array($item['attrs']['data-data'])) {
            $item['attrs']['data-data'] = json_encode($item['attrs']['data-data'], JSON_UNESCAPED_UNICODE);
        }
        if (empty($item['attrs']['data-exts'])) {
            if ($type == 'image' || $type == 'multiple_image') {
                $item['attrs']['data-exts'] = 'jpg|png|gif|bmp|jpeg|webp';
            } else {
                $item['attrs']['data-exts'] = 'doc|docx|xls|xlsx|ppt|pptx|pdf|wps|txt|rar|zip|jpg|png|gif|jpeg|webp|mp4';
            }
        }
        if (empty($item['attrs']['data-accept'])) {
            if ($type == 'image' || $type == 'multiple_image') {
                $item['attrs']['data-accept'] = 'images';
            } else {
                $item['attrs']['data-accept'] = 'file';
            }
        }
        if (!isset($item['attrs']['data-auto'])) {
            $item['attrs']['data-auto'] = true;
        }
        if (!isset($item['attrs']['data-drag'])) {
            $item['attrs']['data-drag'] = true;
        }

        if ($type == 'image' || $type == 'file') {
            $item['attrs']['data-multiple'] = false;
            $item['attrs']['data-number'] = 1;
        } else {
            $item['attrs']['data-multiple'] = true;
            if (!isset($item['attrs']['data-number'])) {
                $item['attrs']['data-number'] = 5;
            }
        }

        if (!isset($item['attrs']['data-size'])) {
            if ($type == 'image' || $type == 'multiple_image') {
                $item['attrs']['data-size'] = 2048;
            } else {
                $item['attrs']['data-size'] = 2048;
            }
        }
        return $item;
    }


    protected function beforeKeyvalueParse($item)
    {
        if (empty($item['fetch'])) {
            $item['fetch'] = 'array';
        }
        $item['attrs']['data-type'] = 'keyvalue';

        return $item;
    }

    protected function beforeTinymceParse($item)
    {
        if (!isset($item['attrs']['data-server'])) {
            $item['attrs']['data-server'] = '';// 默认的上传接口地址
        }
        return $item;
    }

    protected function beforeXmselectParse($item)
    {
        $item['attrs']['xm-select'] = $item['field'];
        $item['attrs']['lay-ignore'] = true;
        if (!isset($item['attrs']['xm-select-skin'])) {
            $item['attrs']['xm-select-skin'] = 'normal';
        }
        return $item;
    }

    protected function beforeTagParse($item)
    {

        return $item;
    }



}